package org.g4studio.core.orm.xibatis.sqlmap.engine.scope;

/**
 * An error context to help us create meaningful error messages
 */
public class ErrorContext {

	private String resource;
	private String activity;
	private String objectId;
	private String moreInfo;
	private Throwable cause;

	/**
	 * Getter for the resource causing the problem
	 * 
	 * @return - the resource
	 */
	public String getResource() {
		return resource;
	}

	/**
	 * Setter for the resource causing the problem
	 * 
	 * @param resource
	 *            - the resource
	 */
	public void setResource(String resource) {
		this.resource = resource;
	}

	/**
	 * Getter for the activity that was happening when the error happened
	 * 
	 * @return - the activity
	 */
	public String getActivity() {
		return activity;
	}

	/**
	 * Getter for the activity that was happening when the error happened
	 * 
	 * @param activity
	 *            - the activity
	 */
	public void setActivity(String activity) {
		this.activity = activity;
	}

	/**
	 * Getter for the object ID where the problem happened
	 * 
	 * @return - the object id
	 */
	public String getObjectId() {
		return objectId;
	}

	/**
	 * Setter for the object ID where the problem happened
	 * 
	 * @param objectId
	 *            - the object id
	 */
	public void setObjectId(String objectId) {
		this.objectId = objectId;
	}

	/**
	 * Getter for more information about the error
	 * 
	 * @return - more information
	 */
	public String getMoreInfo() {
		return moreInfo;
	}

	/**
	 * Setter for more information about the error
	 * 
	 * @param moreInfo
	 *            - more information
	 */
	public void setMoreInfo(String moreInfo) {
		this.moreInfo = moreInfo;
	}

	/**
	 * Getter for the cause of the error
	 * 
	 * @return - the cause
	 */
	public Throwable getCause() {
		return cause;
	}

	/**
	 * Setter for the cause of the error
	 * 
	 * @param cause
	 *            - the cause
	 */
	public void setCause(Throwable cause) {
		this.cause = cause;
	}

	public String toString() {
		StringBuffer message = new StringBuffer();

		// resource
		if (resource != null) {
			message.append("  \n--- The error occurred in ");
			message.append(resource);
			message.append(".");
		}

		// activity
		if (activity != null) {
			message.append("  \n--- The error occurred while ");
			message.append(activity);
			message.append(".");
		}

		// object
		if (objectId != null) {
			message.append("  \n--- Check the ");
			message.append(objectId);
			message.append(".");
		}

		// more info
		if (moreInfo != null) {
			message.append("  \n--- ");
			message.append(moreInfo);
		}

		// cause
		if (cause != null) {
			message.append("  \n--- Cause: ");
			message.append(cause.toString());
		}

		return message.toString();
	}

	/**
	 * Clear the error context
	 */
	public void reset() {
		resource = null;
		activity = null;
		objectId = null;
		moreInfo = null;
		cause = null;
	}

}
